/**
 * 目标：了解get/set的运作模式，实现为某个对象的某个属性设置访问器。
 * 思考：
 * 1. 何为响应式？
 * 2. get 和 set 是如何相互配合的？
 * 3. defineReactive() 方法为什么需要 value 参数？
 * 探究：
 * 1. 是否触发了访问器的递归调用，如何处理？
 */

/**
 * @description 为普通对象的某个属性设置访问器
 * @param {*} obj 
 * @param {*} key 
 * @param {*} value 
 */
function defineReactive(obj, key, value) {
    value = obj[key];
    Object.defineProperty(obj, key, {
        enumerable: true,
        configurable: true,
        get: function () {
            // 在此处收集依赖
            console.log('get:', value);
            return value;
        },
        set: function (newValue) {
            // 在此处通知依赖进行更新
            console.log('set:', newValue);
            value = newValue;
        }
    })
}

//

const obj = {
    name: 'zs',
    age: 18
}

defineReactive(obj, 'name')
console.log(obj.name);
obj.name = 'ls'
console.log(obj.name);

//